|
Расположение в меню |
---|
Эскиз → Ограничения эскиза → Ограничение преломления (Закон Снеллиуса) |
Верстаки |
Скетчер |
Быстрые клавиши |
K W |
Представлено в версии |
0.15 |
См. также |
Нет |
Инструмент Ограничение преломления (Закон Снеллиуса) ограничивает две линии, чтобы они следовали закону преломления света, когда он проникает через границу раздела двух материалов с разными показателями преломления. Смотри Закон Снеллиуса (англ.), (рус.)
Закон Снеллиуса
Последовательность щелчков обозначена жёлтыми стрелками с цифрами, n1 и n2 показывают, где находятся показатели преломления
Ограничения можно создавать с помощью макросов и в консоли Python, используя следующие команды:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
где:
Sketch
- объект эскиза.line1
и pointpos1
- два целых числа, определяющие конечную точку линии в среде с показателем преломления n1. line1
- это индекс линии в эскизе (значение, возвращаемое Sketch.addGeometry), а pointpos1
должен быть равен 1 для начальной точки и 2 для конечной.line2
и pointpos2
- это индексы, определяющие конечную точку второй линии (в среде n2)interface
- индекс, указывающий на линию, обозначающую позицию границы между средой n1 и средой n2n2byn1
- число с плавающей точкой, равное отношению показателей преломления n2/n1На странице Написание скриптов в Скетчер объясняются значения, которые можно использовать для line1
, pointpos1
, line2
, pointpos2
и interface
, а также приводятся дополнительные примеры создания ограничений из скриптов Python.
Пример:
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()